#pragma once
#include <iostream>
#include<stdio.h>
#include <fstream>
#include <unordered_set>

// 从文件中读取
const std::string safecommandname = "safe_command.txt"; // 安全命令文件

class InitCommand
{
public:
    InitCommand()
    {
        std::ifstream in(safecommandname);//以从文件中读取的方式打开文件
        if (in.is_open())//如果打开了
        {
            // 从文件内按行读取并分割，插入dict中
            std::string line;
            while (getline(in, line))
            {
                
                    safe_command.emplace(line);   
            }
        }
        else
        {
            std::cout<<"command.txt open false"<<std::endl;
        }
        in.close();
    }
    std::string excute(const std::string& cmd)
    {
        std::string result;
        FILE* pf=popen(cmd.c_str(),"r");
        if(!pf)
        {
            return "failed";
        }
        char buffer[1024];
        while(fgets(buffer,sizeof(buffer),pf)!=NULL)
        {
            result+=buffer;
        }
        return result;  
    }
    //查找传入的命令是否是安全命令
    bool find(const std::string& key)
    {
        auto iter=safe_command.find(key);
        if(iter==safe_command.end())
        {
            return false; 
        }
        return true;
    }
    void Debug()
    {
        for(auto& e:safe_command)
        {
            std::cout<<e<<std::endl;
        }
    }
private:
    std::unordered_set<std::string> safe_command;
};